#include <bits/stdc++.h>
using namespace std;
using ll = long long;
bool ok(vector<string> v){
int n = v.size();
int m = v[0].size();
for(int i = 0; i < n; i++){
for(int j = 1; j < m; j++){
if(v[i][j] != v[i][j-1]) return 0;
}
}
vector<char> v1;
vector<int> w;
for(int i = 0; i < n; i++){
if(i == 0 || v[i][0] != v[i-1][0]){
v1.push_back(v[i][0]);
w.push_back(1);
} else w.back()++;
}
if(v1.size() != 3) return 0;
if(w[0] != w[1] || w[1] != w[2]) return 0;
set<char> s(v1.begin(), v1.end());
if(s.size() != 3) return 0;
return 1;
}
vector<string> trans(vector<string> v){
vector<string> res;
int n = v.size(), m = v[0].size();
for(int j = 0; j < m; j++){
string cur;
for(int i = 0; i < n; i++){
cur += v[i][j];
}
res.push_back(cur);
}
return res;
}
int main() {
int n, m;
cin >> n >> m;
vector<string> v(n);
for(string &x : v) cin >> x;
if(ok(v) || ok(trans(v))) cout << "YES";
else cout << "NO";
return 0;
}
405A - Gravity Flip | 499B - Lecture |
709A - Juicer | 1358C - Celex Update |
1466B - Last minute enhancements | 450B - Jzzhu and Sequences |
1582C - Grandma Capa Knits a Scarf | 492A - Vanya and Cubes |
217A - Ice Skating | 270A - Fancy Fence |
181A - Series of Crimes | 1638A - Reverse |
1654C - Alice and the Cake | 369A - Valera and Plates |
1626A - Equidistant Letters | 977D - Divide by three multiply by two |
1654B - Prefix Removals | 1654A - Maximum Cake Tastiness |
1649A - Game | 139A - Petr and Book |
1612A - Distance | 520A - Pangram |
124A - The number of positions | 1041A - Heist |
901A - Hashing Trees | 1283A - Minutes Before the New Year |
1654D - Potion Brewing Class | 1107B - Digital root |
25A - IQ test | 785A - Anton and Polyhedrons |